package com.boardgamelib.entity;

import com.boardgamelib.system.SistemaCheGestisceLeCelleVicineOvveroQuelleProssime;
import com.boardgamelib.system.SistemaGiocatori;
import com.boardgamelib.system.SistemaMosse;
import com.boardgamelib.system.SistemaTabellone;

/** Gioco<br>
 * Rappresenta un intero gioco<br>
 * Il corretto nome della classe sarebbe Game<br>
 * N.B. i nomi delle funzioni fanno pena, perdonatemi voi che leggete.<br>
 * 
 * 
 * TODO Commenti
 * @author g.terenziani
 *
 */
public interface Gioco<D extends Enum<D>, C extends Cella<P>, G extends Giocatore, P extends Pezzo<G>,  M extends Mossa<C, P, G>> {
	
	public SistemaCheGestisceLeCelleVicineOvveroQuelleProssime<D, C> getSistemaCheGestisceLeCelleVicineOvveroQuelleProssime();
	
	public SistemaTabellone<C, P, G> getSistemaTabellone();
	
	public SistemaMosse<D, C, G, P, M> getSistemaMosse();
	
	public SistemaGiocatori<G> getSistemaGiocatori();
	
	public void nuovaPartita();
	
}
